package crontab

import (
	"fmt"
	"quant/backend/constants"
	"quant/backend/utils"
	"time"

	"github.com/robfig/cron/v3"
	"github.com/sirupsen/logrus"
)

func StartCrontab() error {
	logrus.Info("========== 开始配置定时任务 ===========")
	job := cron.New(cron.WithLocation(constants.SysTimeLocation), cron.WithSeconds())
	// job.AddFunc("@every 60s", func() {
	// 	fmt.Println("hello world")
	// })
	var err error
	var entryId cron.EntryID
	var cronExpression string
	cronExpression = "00 26 09 * * ?"
	if entryId, err = job.AddFunc(cronExpression, helloTest); err != nil {
		err := fmt.Errorf("添加定时任务失败，错误信息: %w", err)
		logrus.WithField("方法", "helloTest").Errorf("添加定时任务失败，错误信息: %v", err)
		return err
	} else {
		logrus.WithField("方法", "helloTest").WithField("执行时间", utils.TranslateCronToChinese(cronExpression)).Infof("添加定时任务成功，ID: %v", entryId)
	}

	// 开盘前定时执行任务: 每天 09:26 执行任务
	cronExpression = "0 26 9 ? * 2-6"
	if entryId, err = job.AddFunc(cronExpression, execPreMarketJob); err != nil {
		err := fmt.Errorf("添加定时任务失败，错误信息: %w", err)
		logrus.WithField("方法", "execPreMarketJob").Errorf("添加定时任务失败，错误信息: %v", err)
		return err
	} else {
		logrus.WithField("方法", "execPreMarketJob").WithField("执行时间", utils.TranslateCronToChinese(cronExpression)).Infof("添加定时任务成功，ID: %v", entryId)
	}

	// 收盘后定时执行任务: 周一到周五 22:00 执行任务
	cronExpression = "0 0 22 ? * 2-6"
	if entryId, err = job.AddFunc("00 00 22 * * ?", execPostMarketJob); err != nil {
		err := fmt.Errorf("添加定时任务失败，错误信息: %w", err)
		logrus.WithField("方法", "execPostMarketJob").Errorf("添加定时任务失败，错误信息: %v", err)
		return err
	} else {
		logrus.WithField("方法", "execPostMarketJob").WithField("执行时间", utils.TranslateCronToChinese(cronExpression)).Infof("添加定时任务成功，ID: %v", entryId)
	}
	job.Start()
	logrus.Info("========== 定时任务配置完成 ===========")
	return nil
}

func helloTest() {
	logrus.Info("Hello from cronutil!")
}

// 开盘前定时执行任务
func execPreMarketJob() {
	preMarketJob(time.Now().Format(constants.TimeLayout))
}

// 收盘后定时执行任务
func execPostMarketJob() {
}
